package edu.algo3.algoThief.dao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom2.Element;

public class DatosSospechosos extends repositorioXML {

	// ********* Variables de instancia **********
	
	private static String nombreDocumentoXML = "datos/pistas/xml/listaDeSospechosos.xml";
	
	// ********* Constructores **********
	
	protected DatosSospechosos()
	{
		
	}
	
	// ********* Getters **********
	
	protected ArrayList<ArrayList<String>> getTodosLosDatos()
	{
		parseDocumento(nombreDocumentoXML);
		return obtieneTodosLosDatos();
	}
	
	protected static ArrayList<String> getDatosSobre(String sospechosoApellido)
	{
		parseDocumento(nombreDocumentoXML);
		return obtieneDatosSobre(sospechosoApellido);
	}
	
	public static ArrayList<String> getListaSospechosos()
	{
		parseDocumento(nombreDocumentoXML);
		ArrayList<String> listaSospechosos = new ArrayList<String>();
		
		List<Element> listaDeSospechosos = racine.getChildren("sospechoso");
		Iterator<Element> i1 = listaDeSospechosos.iterator();
		while(i1.hasNext())
		{
			Element sospechoso = (Element)i1.next();
			Element apellido = sospechoso.getChild("apellido");
			listaSospechosos.add(apellido.getText());
		}
		
		return listaSospechosos;
	}
	
	// ********* Setters **********
	
	// ********* Metodos de instancia **********
	
	private static ArrayList<String> obtieneDatosSobre(String sospechosoApellido)
	{
		ArrayList<String> datos = new ArrayList<String>();
		String resultado = new String();
		resultado = "No Buscado";
		List<Element> listaDeSospechosos = racine.getChildren("sospechoso");
		Iterator<Element> i1 = listaDeSospechosos.iterator();
		while(i1.hasNext() & resultado.equals("No Buscado"))
		{
			Element sospechoso = (Element)i1.next();
			List<Element> listaDeCaracteristicas = sospechoso.getChildren();
			if( (listaDeCaracteristicas.get(0)).getText().equals(sospechosoApellido) )
			{
				Iterator<Element> i2 = listaDeCaracteristicas.iterator();
				while(i2.hasNext())
				{
					Element caracteristica = (Element)i2.next();
					datos.add(caracteristica.getText());
				}
			resultado = "buscado";
			}
		}
		// TODO : excepcion
		if(resultado.equals("No Buscado"))
		{
			System.out.println("El sospechoso no existe");
		}
		return datos;
	}
	
	@SuppressWarnings("unchecked")
	private static ArrayList<ArrayList<String>> obtieneTodosLosDatos()
	{	
		ArrayList<ArrayList<String>> datosGenerales = new ArrayList<ArrayList<String>>();
		ArrayList<String> tmp = new ArrayList<String>();
		ArrayList<String> tmp1 = new ArrayList<String>();
		
		List<Element> listaDeSospechosos = racine.getChildren("sospechoso");
		Iterator<Element> i1 = listaDeSospechosos.iterator();
		while(i1.hasNext())
		{
			if(!tmp.isEmpty())
			{ 
				tmp1 = (ArrayList<String>) tmp.clone();
				datosGenerales.add(tmp1);
			}
			tmp.removeAll(tmp);
			Element sospechoso = (Element)i1.next();
			List<Element> listaDeCaracteristicas = sospechoso.getChildren();
			
			Iterator<Element> i2 = listaDeCaracteristicas.iterator();
			while(i2.hasNext())
			{
				Element caracteristica = (Element)i2.next();
				tmp.add(caracteristica.getText());
			}
		}
		
		tmp1 = (ArrayList<String>) tmp.clone();
		datosGenerales.add(tmp1);
		tmp.removeAll(tmp);
		return datosGenerales;
	}
	
}
